package com.briup.day09;

import lombok.Getter;

import java.time.LocalDate;
import java.util.StringJoiner;

public class Test08 {
    public static void main(String[] args) {
        Student s = new Student("张三", "0301");
        Student s2 = new Student("李四", "0301");
        System.out.println(s);
        System.out.println(s2);
        Student s3 = new Student("王五", "0302");
        System.out.println(s3);
    }

    // 在编写和定义方法时，一定要谨记 单一职责原则
    // 单一职责原则就是指===>一个方法只解决一个核心问题
    // 如果方法中的代码过长时，
    // 我们建议将方法内的代码按照功能和职责以及是否可复用划分为多个方法
    public static void test() {
        System.out.println("这是一个test方法");
        method();
    }

    // 在重要方法拆分的过程中，如果某部分方法不需要对外暴露，那么需要将该方法进行隐藏
    private static void method() {
        System.out.println("这是方法1");
    }
}

class Student {
    // 班级内的编号
    private static int no;
    // 封装：将类中成员变量进行私有化，对外隐藏属性的赋值过程，只提供对外访问的方法
    // 22030101
    // 学号
    private String id;
    // 学生姓名
    @Getter
    private String name;
    // 班级编号
    @Getter
    private String classNO;

    public Student(String name, String classNO) {
        this.name = name;
        this.classNO = classNO;
        setId();
    }

    private void setId() {
        // 22030101
        this.id = String.format("%02d%s%02d%n",
                LocalDate.now().getYear() % 100, classNO, ++no);
    }


    @Override
    public String toString() {
        return new StringJoiner(", ", Student.class.getSimpleName() + "[", "]")
                .add("id='" + id + "'")
                .add("name='" + name + "'")
                .add("classNO='" + classNO + "'")
                .toString();
    }
}